package com.yycx.common.mybatis.base.service;

import com.baomidou.mybatisplus.extension.service.IService;

import com.yycx.common.base.entity.EntityMap;
import com.yycx.common.mybatis.model.*;
import com.yycx.common.mybatis.query.CriteriaQuery;
import org.springframework.ui.ModelMap;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;
import java.util.List;
import java.util.Map;


/**
 * @author zyf
 */
public interface IBaseService<T> extends IService<T> {


    /**
     * 自定义分页(xml中配置外键链接查询)
     *
     * @param map
     * @return
     */
    ResultBody pageList(Map map);


    /**
     * 自定义更新带扩展事件
     *
     * @param map
     * @return
     */
    ResultBody edit(Map map);


    /**
     * 自定义保存带扩展事件
     *
     * @param map
     * @return
     */
    ResultBody add(Map map);


    /**
     * 自定义删除带扩展事件
     *
     * @param map
     * @return
     */
    ResultBody delete(Map map);

    /**
     * 自定义查询单个实体(返回自定义Map类型,便于枚举转换)
     *
     * @param map
     * @return
     */
    ResultBody get(Map map);


    /**
     * 根据Map查询
     *
     * @param map
     * @return
     */
    ResultBody listEntityMap(Map map);


    /**
     * 根据cq查询,返回List<EntityMap>
     *
     * @param cq
     * @return
     */
    List<EntityMap> selectEntityMap(CriteriaQuery<?> cq);


    /**
     * 根据cq查询单个对象
     *
     * @param cq
     * @return
     */
    EntityMap findOne(CriteriaQuery cq);

    /**
     * 根据单个属性查询
     *
     * @param propertyName
     * @param value
     * @return
     */
    T getByProperty(String propertyName, Object value);

    /**
     * 根据主键查询
     *
     * @param id
     * @return
     */
    EntityMap findById(Serializable id);


    /**
     * 通用状态修改
     *
     * @param map
     * @param fieldName 状态字段名
     * @param state     状态值
     * @return
     */
    ResultBody setState(Map map, String fieldName, Integer state);

    /**
     * 设置推荐状态
     *
     * @param ids
     * @param recommend
     * @return
     */
    ResultBody setRecommend(Long[] ids, Integer recommend);


    /**
     * 批量插入
     *
     * @param entityList
     * @return
     */
    int insertBatchSomeColumn(List<T> entityList);

    /**
     * 无模板导出数据
     *
     * @param map
     * @param request
     * @param response
     * @param config   导出配置   [fileName,title,handlerName,sheetName]
     * @return
     */
    String export(Map map, HttpServletRequest request, HttpServletResponse response, String... config);

    /**
     * 按模板导出数据
     *
     * @param map
     * @param request
     * @param response
     * @param config   [fileName，title,handlerName,sheetName]
     */
    void templateExport(Map map, HttpServletRequest request, HttpServletResponse response, String... config);


}
